Skip to main content

React Markdown renderer, editor and template engine

Render Markdown. Add editing. Personalize it. Three React packages that share one Markdown model, so an app can grow from displaying Markdown to authoring and personalizing it without changing how anything is stored.

npm i @react-markdown-kit/renderer
Start here

One component

No provider, no stylesheet, no configuration, no design system. Edit the Markdown on the left and watch the output follow, or open the renderer demo to try every option and copy the code.

import Markdown from '@react-markdown-kit/renderer'

<Markdown>{content}</Markdown>
Markdown (edit me)
Rendered

Release 1.4

Ships today. See the changelog.

  • Faster cold render
  • compileMarkdown is now public
MetricBeforeAfter
Cold render12.4 ms9.1 ms
Then, when you need it

The same document, personalized

Switch customer. The output changes and the authored source does not. That is the whole idea: it stays Markdown at every step.

Authored template never changes
## Account review for {{customer.name}}

Your plan renews on {{renewsAt | date:"medium"}}.

| Item | Amount |
| --- | ---: |
| Subscription | {{amounts.subscription \| currency:"USD"}} |
| Overage | {{amounts.overage \| currency:"USD"}} |
Resolved for Acme changes

Account review for Acme Industrial

Your plan renews on Nov 1, 2026.

ItemAmount
Subscription$4,800.00
Overage$312.50
Data passed to template()
{
  "customer": {
    "name": "Acme Industrial"
  },
  "renewsAt": "2026-11-01",
  "amounts": {
    "subscription": 4800,
    "overage": 312.5
  }
}
Resolution runs here in your browser with the same engine a Node service, an email job or a PDF pipeline would use. Resolving never calls React.

Two packages, and three plugin packages that work in both

The renderer never requires the editor. Templates, Mermaid diagrams and slides install separately and are used only through the extension system.

Renderer

Markdown to React. Safe by default, unstyled by default, server-ready. Matches react-markdown on every compared prop.

Read more

Editor

Rich, source and preview authoring that reads and writes plain Markdown. Opening and closing a document does not change a byte of it.

Read more · Demo

Templates

template({ data }) resolves typed variables while the renderer parses; templateVariables() edits them as chips. A plugin package: no engine to call, and no React needed to resolve.

Read more

Diagrams

mermaid() turns a ```mermaid flowchart into static SVG in the renderer and a drawing canvas in the editor. A plugin package with one export.

Read more · Live editor

Slides

slides() reads a Markdown file whose slides are separated by --- and renders it as a deck of sections; /present adds keyboard-driven present mode and /editor the authoring commands.

Read more · Demo

Guides

Task pages with live examples, each rendered by the kit itself when this site was built.

Comparisons

One page per library, on install size, output format, security defaults, server rendering and migration. Byte counts come from docs/data/bundle-sizes.json, written by scripts/compare-bundles.mjs.

Evidence, not adjectives

We do not claim “drop-in replacement” or “fastest”. Every number here has a test behind it.

39/39
prop comparisons matching react-markdown 10.1.0
96%
CommonMark examples, counting raw HTML dropped by design
22/22
editor round trips that are byte-identical
0
styling dependencies in any package